<?php

/**
 * Classe abstraite des DAO.
 * 
 * @author Ludovic
 */
abstract class Dao {

	
	/**
	 * Méthode de recherche 
	 * 
	 * @param string $where
	 */
	protected static function find($tableName,$where=null){
	
		$sql = "SELECT * FROM ".$tableName;
		if (!empty($where)){
			$sql = $sql ." WHERE ". $where;
		}
		return Dao::query($sql);
	}
	
	/**
	 * Méthode de suppression
	 *
	 * @param string $where
	 */
	public static function delete($tableName,$where=null){
	
		$sql = "DELETE FROM ".$tableName." WHERE ". $where;
		return Dao::exec($sql);
	}
	

	/**
	 * Méthode générique d'éxécution de SQL
	 */
	protected static function query($sql){
		global $bdd;
		global $logger;
		$requete = $bdd->prepare($sql);

		if (!$requete) {
			die("Erreur du format de la requête SQL");
			$logger->error("Erreur dans le format de la requête SQL " . $dbh->errorInfo());
		}
	
		// Exécution de la requête
		if ($requete->execute()){
			if (MM_DEV_MODE){
				$logger->debug("Exécution de la requête avec succès : ".$sql);
			}
		} else {
			if (MM_DEV_MODE){
				$logger->error("La requête n'a rien retournée :  ".$sql);
			}
			return null;
		}
		
		// Récupération des résultats de la requete
		$results=$requete->fetchall(PDO::FETCH_ASSOC);
		$requete->closeCursor();
		return $results;
	}
	
	
	/**
	 * Méthode de récupération d'un seul élément en base.
	 */
	protected static function queryOne($sql){
		$results = Dao::query($sql);
		if (empty($results)) return null;
		return $results[0];
	}
	
	/**
	 * Méthode générique d'éxécution de SQL
	 */
	protected static function exec($sql){
		global $bdd;
		global $logger;
		$requete = $bdd->prepare($sql);
	
		if (!$requete) {
			die("Erreur du format de la requête SQL");
			$logger->error("Erreur dans le format de la requête SQL " . $dbh->errorInfo());
		}

                // Exécution de la requête
		if ($requete->execute()){
			if (MM_DEV_MODE){
				$logger->debug("Exécution de la requête avec succès : ".$sql);
			}
			return true;
		}
		
		$logger->error("Erreur lors de l'exécution de la requête : ".$sql);
		die("Erreur lors de l'exécution de la requête");
	}
        
}
